package com.h2cloud.aspect.cacheAble;


import java.lang.annotation.*;

/**
 * 方法级缓存
 * 标注了这个注解的方法返回值将会被缓存
 * @author xp7
 *
 */
@Documented
@Target({ ElementType.METHOD,ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Cacheable {

	/**
     * 缓存过期时间，单位是秒
     * 默认1800秒(半小时)
     */
    int expire() default 1800;

    /**
     * 缓存key,支持自定义
     * 如果没有设置使用默认方式
     * 自定义key+请求参数
     * @return
     */
    String key() default "";

    /**
     * 是否强制放进jvm缓存不管缓存对象上限
     * 默认不强制
     * 只有当CacheMode.JVM_AND_REDIS时forcePutIntoJvm才生效
     * @return
     */
    boolean forcePutIntoJvm() default false;

    /**
     * 缓存模式,默认为jvm/redis都放
     * @return
     */
    CacheMode cacheMode() default CacheMode.JVM_AND_REDIS;


    /**
     * 自定义缓存参数名称
     *
     * 举例：
     * 原来"缓存注解方法"中无意义或重复的参数过多，可以仅保留需要的参数即可 processInstanceId
     *     @Cacheable(key = "getRecordByProcessInstanceId", paramName = {"processInstanceId"})
     *     public WorkflowRecordIndex getRecordByProcessInstanceId(String processInstanceId,String a ,String b ,String c...) {
     *         ...
     *     }
     *
     * @return {@link String[]}
     */
    String[] paramName() default {};

}
